import java.util.ArrayList;
import java.util.List;
//写之前回顾链表由什么构成
public class MySingleList implements Ilist{//要实现接口，才能重写接口中的方法
//    public MySingleList(){
//        int val;
//        MySingleList next;
//    }
//上述写法错误1、构造方法的作用是初始化对象，而不是申明变量
    //2、val 和 next 仅在构造方法的代码块内有效，构造方法执行结束后，这些变量会被销毁，类的其他方法无法访问

//正确写法:
//节点的内部类,定义一个静态，静态内部类作为类的一种，如果要使用其非静态成员（如非静态属性、非静态方法），依然需要创建对象
    static class ListNode{
        int val;
        ListNode next;
        public  ListNode(int val){//这里误加了void，构造方法必须与类名同名且无返回值声明。
            this.val=val;
        }
     }

   public ListNode head;//不放在ListNode里面，因为它属于链表的结构，而不是节点的组成元素

    public void creatlist(){
        ListNode node1=new ListNode(12);
        ListNode node2=new ListNode(23);
        ListNode node3=new ListNode(34);
        ListNode node4=new ListNode(45);
        ListNode node5=new ListNode(56);
        node1.next=node2;
        node2.next=node3;
        node3.next=node4;
        node4.next=node5;
        this.head=node1;
    }

    @Override
    public void addFirst(int data) {
        ListNode newH=new ListNode(data);
        if(this.head==null){
            //newH=head;写反了，写之前考虑清楚
            this.head=newH;
        }else {//要有else，否则无论如何都要执行。
            newH.next = head;
            this.head = newH;//this又忘写。
        }

    }


    @Override
    public void addLast(int data) {
        ListNode newL=new ListNode(data);
        ListNode cur=this.head;
        if(this.head==null){
            this.head=newL;//要不加return，要不加else！否则if完了，后面的代码还会继续执行
        }else {
            while (cur.next != null) {
                cur = cur.next;
            }
            cur.next = newL;
            newL.next = null;//// 尾节点的 next 本身就是 null，这行代码可省略（构造方法若已初始化 next 为 null）
        }
    }

    @Override
    public void addIndex(int index, int data) {



    }

    @Override
    public boolean contains(int key) {
        ListNode cur=this.head;
        while(cur!=null){
            if(cur.val==key) {
                return true;
            }
            cur=cur.next;//这里又有又忘记next了！
        }
        return false;
    }

    @Override
    public void remove(int key) {

    }

    @Override
    public void removeAllKey(int key) {

    }

    @Override
    public int size() {
        ListNode cur=this.head;
        int count=0;//一个变量一定要初始化啊
        while(cur!=null){
            count++;
            cur=cur.next;
        }
        return count;
    }

    @Override
    public void clear() {

    }

    @Override
    public void display() {
        ListNode cur=this.head;//记得写this！
        while(cur!=null){
            System.out.print(cur.val+" ");
            cur=cur.next;//一定要记得.next
        }

        System.out.println();
    }//先要实现了接口才能重写里面的方法


}
